// 2598. 执行操作后的最大 MEX

// 给你一个下标从 0 开始的整数数组 nums 和一个整数 value 。

// 在一步操作中，你可以对 nums 中的任一元素加上或减去 value 。

// 例如，如果 nums = [1, 2, 3] 且 value = 2 ，你可以选择 nums[0] 减去 value ，得到 nums = [-1, 2, 3] 。
// 数组的 MEX(minimum excluded) 是指其中数组中缺失的最小非负整数。

// 例如，[-1, 2, 3] 的 MEX 是 0 ，而[1, 0, 3] 的 MEX 是 2 。
// 返回在执行上述操作 任意次 后，nums 的最大 MEX 。

// 示例 1：

// 输入：nums = [1, -10, 7, 13, 6, 8], value = 5
// 输出：4
// 解释：执行下述操作可以得到这一结果：
// - nums[1] 加上 value 两次，nums = [1, 0, 7, 13, 6, 8]
//     - nums[2] 减去 value 一次，nums = [1, 0, 2, 13, 6, 8]
//         - nums[3] 减去 value 两次，nums = [1, 0, 2, 3, 6, 8]
// nums 的 MEX 是 4 。可以证明 4 是可以取到的最大 MEX 。

// var findSmallestInteger = function (nums, value) {
//     let remainderList = []
//     let floatList = []
//     let MEX
//     nums.map(item => {
//         remainderList.push(((item % value) + value) % value)
//     })
//     for (i = 0; i <= value - 1; i++) {
//         let float = remainderList.filter(item => item === i).length
//         floatList.push(float)
//     }
//     MEX = floatList.findIndex(item => item === Math.min(...floatList))
//     Math.min(...floatList) === 0 ? MEX : MEX = MEX + value * floatList[MEX]
//     return MEX
// };
function findSmallestInteger(nums, value) {
    const ms = new Array(value).fill(0);
    for (const n of nums) {
        const mod = n % value + (n % value < 0 ? value : 0);
        ms[mod]++;
    }
    let ans = 0;
    for (let i = 0; i < nums.length; i++, ans++) {
        const mod = i % value;
        if (ms[mod] < 1) break;
        ms[mod]--;
    }

    return ans;
};
console.log(findSmallestInteger([1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0], 2));
// const ms = new Array(5).fill(0)
// console.log(ms);
// ms[1]++
// console.log(ms);
// const arr = [0, 0, 0]
// arr[1]++
// console.log(arr);
// console.log(-10 % 5);
// const list = [0, 1, 2, -1, 3, 0]
// console.log(list.findIndex(item => item === Math.min(...list)));
// console.log(list.findIndex(item => item === 4));

// console.log(list.filter(item => item === 0).length);